指標就在前方不遠處...
今日主題:const 指標
const用意是常數,一旦定義之後即不能再改變,若將指標與const共用時應注意此點。
請看程式碼:
#include <stdio.h>
main()
{
int x=100, y=200;
int * const ptr = &x;
*ptr = 200;
printf("%d\n", *ptr);
// 結果:200,可更改常數指標所指到的值
// 但不可更改常數ptr指標本身,例如:ptr=&y則會產生錯誤
}
但不可更改常數ptr指標本身,例如:ptr=&y則會產生錯誤
const 不可以
那可不可以
<pre class="c" name="code">
&x = &y;
呢
"&x = &y;"
"&x = 0x7fff364f9e58;"
這種寫法是不行的,因為在編譯期,系統即配置一個固定位址給x,此位址在執行期不能改變,但該位址內要存100或200則可改變。(此例是透過*ptr改之)
所以
<pre class="c" name="code">
int x=100;
沒有加 const 也是不可以改位址
嗯
越來越混淆了
不會呀,因為&X根本就不能放在等號左邊...
cdfu提到:
&X根本就不能放在等號左邊
簡單明瞭,今天又學到了一點
真他X的簡單明瞭,今天又學到了一點
沒有講到以下三者的不同:
int * const ptr = &x;
const int * ptr = &x;
const int * const ptr = &x;
謝謝卡大補充,那就繼續說明一下:
下了石化咒const,該變數就不能再被改變。若改變,則編譯期會報錯。
問題是const的被施咒對象為何?
<pre class="c" name="code">
int * const ptr = &x;
被施咒對象是ptr,所以ptr++會報錯
<pre class="c" name="code">
const int * ptr = &x;
被施咒對象是ptr指到的int,所以*ptr = 101會報錯
<pre class="c" name="code">
const int * const ptr = &x;
被施咒對象同時是兩者,所以以上寫法皆會報錯